/*
 * Project Name:yunjiafen
 * File Name:PageUtil.java
 * Package Name:com.bestapp.yunjiafen.core.vo
 * Date:2018年10月24日下午11:59
 * Copyright (c) 2018, bestapp All Rights Reserved.
 *
 */

package com.gitee.xmhzzz.component.spring.cloud.component.dao.utils;


import com.gitee.xmhzzz.component.common.dto.PageBase;
import com.gitee.xmhzzz.component.common.dto.PageVO;
import com.gitee.xmhzzz.component.spring.cloud.component.dao.context.PageContextMng;
import com.github.pagehelper.PageHelper;


import java.util.Collections;
import java.util.List;

/**
  * @ClassName
  * @Description
  * @Author wzq
  * @Date 2023/12/15 17:08
  * @Version 1.0
  */
public class PageUtil {

    public static void setPage(PageBase page) {
        PageContextMng.context().setPageBase(page);
    }


    public static void startPage() {
        startPage(true);
    }

    /**
     * startPage: 开启分页, . <br/>
     *
     * @param count 分页之前是否查询coun
     */
    public static void startPage(boolean count) {
        PageBase page = PageContextMng.context().getPageBase();
        if (page == null) {
            page = new PageBase();
        }
        PageHelper.startPage(page.getCurrent(), page.getSize(), count);
    }

    public static void startPage(PageBase page) {
        if (page == null) {
            page = new PageBase();
        }
        PageHelper.startPage(page.getCurrent(), page.getSize(), true);
    }

    /**
     * startPage: 开启分页并设置排序规则 . <br/>
     *
     * @param orderBy
     * @return
     */
    public static void startPage(String orderBy) {
        PageBase page = PageContextMng.context().getPageBase();
        if (page == null) {
            page = new PageBase();
        }
        PageHelper.startPage(page.getCurrent(), page.getSize(), orderBy);
    }

    public static void startPage(int size) {
        PageHelper.startPage(1, size, false);
    }

    /**
     * getPage: 获取分页参数 . <br/>
     *
     * @return {@link PageBase}
     */
    public static PageBase getPageNo() {
        return PageContextMng.context().getPageBase();
    }

    public static <T> PageVO<T> build() {
        return build(Collections.emptyList());
    }


    /**
     * 复制分页参数
     * @param pageVO
     * @param pageClass
     * @return
     * @param <T>
     */
    public static <T> PageVO<T> copyPage(PageVO pageVO, Class<T> pageClass) {
        PageVO<T> copyPage = new PageVO<>();
        copyPage.setPages(pageVO.getPages());
        copyPage.setSize(pageVO.getSize());
        copyPage.setCurrent(pageVO.getCurrent());
        copyPage.setTotal(pageVO.getTotal());
        return copyPage;
    }


    /**
     * 把list转为分页信息
     *
     * @param list
     * @param <T>
     * @return
     */
    public static <T> PageVO<T> build(List<T> list) {
        return build(list, list);
    }

    /**
     * 把list转为分页信息
     *
     * @param pageInfo 原始的list
     * @param list     返回实际的list
     * @param <T>
     * @return
     */
    public static <T> PageVO<T> build(List pageInfo, List<T> list) {
        PageVO<T> pagination = new PageVO<>();
        if (pageInfo instanceof com.github.pagehelper.Page) {
            com.github.pagehelper.Page page = (com.github.pagehelper.Page) pageInfo;
            pagination.setRecords(list);
            pagination.setCurrent(page.getPageNum());
            pagination.setTotal((int) page.getTotal());
            pagination.setSize(page.getPageSize());
            pagination.setPages(page.getPages());
        } else if (pageInfo != null) {
            pagination.setRecords(list);
            pagination.setCurrent(1);
            pagination.setTotal(pageInfo.size());
            pagination.setSize(pageInfo.size());
            pagination.setPages(pageInfo.size() > 0 ? 1 : 0);
        }
        return pagination;
    }

}
